package tim.prune.data;
import java.io.ByteArrayInputStream;
import java.io.File;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
/**
* Class to represent an audio clip for correlation
*/
public class AudioClip extends MediaObject
{
/** length of current audio clip in seconds */
private int _lengthInSeconds = LENGTH_UNKNOWN;
private static final int LENGTH_UNKNOWN = -1;
private static final int LENGTH_NOT_AVAILABLE = -2;
/**
* Constructor
* @param inFile file object
*/
public AudioClip(File inFile)
{
// Timestamp is always just taken from the file modification stamp
super(inFile, new Timestamp(inFile.lastModified()));
}
/**
* Constructor
* @param inData byte array of data
* @param inName name of source file
* @param inUrl url from which it came (or null)
*/
public AudioClip(byte[] inData, String inName, String inUrl)
{
super(inData, inName, inUrl);
}
/**
* @return length of this audio clip in seconds
*/
public int getLengthInSeconds()
{
if (_lengthInSeconds == LENGTH_UNKNOWN)
{
try {
AudioFileFormat format = null;
if (getFile() != null)
format = AudioSystem.getAudioFileFormat(getFile());
else
format = AudioSystem.getAudioFileFormat(new ByteArrayInputStream(_data));
_lengthInSeconds = (int) (format.getFrameLength() / format.getFormat().getFrameRate());
}
catch (Exception e) {
_lengthInSeconds = LENGTH_NOT_AVAILABLE;
}
}
return _lengthInSeconds;
}
}